'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.default = goTop;

var _getScrollHeight = require('./getScrollHeight');

var _getScrollHeight2 = _interopRequireDefault(_getScrollHeight);

var _getScrollTop = require('./getScrollTop');

var _getScrollTop2 = _interopRequireDefault(_getScrollTop);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var Hz = 1000 / 60;
var requestAnimFrame = function () {
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) {
        window.setTimeout(callback, Hz);
    };
}();

/**
 * 平滑滚动到顶部
 * @param targetElement 可以指定目标元素
 */
function goTop(targetElement) {
    var scrollHeight = (0, _getScrollHeight2.default)(targetElement);
    //1秒钟滚动完
    var time = 1000;
    var step = -scrollHeight * Hz / time;
    var scrollTopBy = targetElement ? function (value) {
        //注意：此处的value是个负数
        //获取scrollTop值，//声明了DTD的标准网页取document.documentElement.scrollTop，否则取document.body.scrollTop；因为二者只有一个会生效，另一个就恒为0，所以取和值可以得到网页的真正的scrollTop值
        var sTop = (0, _getScrollTop2.default)(targetElement);
        sTop += value;
        targetElement.scrollTop = sTop > 0 ? sTop : 0;
        return sTop;
    } : function (value) {
        window.scrollBy(0, value);
        //获取scrollTop值，//声明了DTD的标准网页取document.documentElement.scrollTop，否则取document.body.scrollTop；因为二者只有一个会生效，另一个就恒为0，所以取和值可以得到网页的真正的scrollTop值
        return (0, _getScrollTop2.default)();
    };
    var scroll = function scroll() {
        //把内容滚动指定的像素数（第一个参数是向右滚动的像素数，第二个参数是向下滚动的像素数）
        var sTop = scrollTopBy(step);
        //延时递归调用，模拟滚动向上效果
        if (sTop > 0) {
            requestAnimFrame(scroll);
        }
    };
    scroll();
}